home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 112 / EnigmaAmiga112CD.iso / dalla rivista / news / orbit / source / joystick_amiga.c < prev    next >
C/C++ Source or Header  |  2000-05-01  |  3KB  |  143 lines

  1. /*
  2.     Amiga Joystick and Joypad support for ORBIT
  3.  
  4.     29.04.2000 - written, tested, worked :)
  5.     30.04.2000 - added diagonal movement,
  6.                  pitch roll for joypad,
  7.                  fire while moving
  8. */
  9.  
  10. #include <libraries/lowlevel.h>
  11. #include <clib/lowlevel_protos.h>
  12. #include "orbit.h"
  13.  
  14. struct Library *LowLevelBase = NULL;
  15. ULONG amiga_joy_type;
  16.  
  17. #define AMIGA_JOY_PORT 1
  18.  
  19. void InitJoy()
  20. {
  21.   UBYTE i;
  22.  
  23.   joy_available = 0;
  24.  
  25.   if (LowLevelBase = (struct Library *)OpenLibrary("lowlevel.library", 40L))
  26.   {
  27.     /*  we call this several times just to go sure  */
  28.     for (i=0; i<3; i++)
  29.     {
  30.       amiga_joy_type = ReadJoyPort(AMIGA_JOY_PORT);
  31.       Delay(1);
  32.     }
  33.     if ((amiga_joy_type == JP_TYPE_GAMECTLR) || (amiga_joy_type == JP_TYPE_JOYSTK))
  34.     {
  35.       joy_available = 1;
  36.       return;
  37.     }
  38.     CloseLibrary(LowLevelBase);
  39.     LowLevelBase = NULL;
  40.   }
  41. }
  42.  
  43. void JoyStick()
  44. {
  45.   /* Ignore joystick motion if dead */
  46.   if ((state == STATE_DEAD1) || (state == STATE_DEAD2))
  47.     return;
  48.  
  49.   switch(ReadJoyPort(AMIGA_JOY_PORT) - amiga_joy_type)
  50.   {
  51.     case JPF_BUTTON_RED:
  52.       PlayerFires();
  53.     break;
  54.     case JPF_JOY_UP:
  55.       player.move_up = 0.5;
  56.     break;
  57.     case JPF_JOY_DOWN:
  58.       player.move_down = 0.5;
  59.     break;
  60.     case JPF_JOY_LEFT:
  61.       player.move_left = 0.5;
  62.     break;
  63.     case JPF_JOY_RIGHT:
  64.       player.move_right = 0.5;
  65.     break;
  66.     case (JPF_JOY_UP + JPF_JOY_LEFT):
  67.       player.move_up =
  68.       player.move_left = 0.5;
  69.     break;
  70.     case (JPF_JOY_UP + JPF_JOY_RIGHT):
  71.       player.move_up =
  72.       player.move_right = 0.5;
  73.     break;
  74.     case (JPF_JOY_DOWN + JPF_JOY_LEFT):
  75.       player.move_down =
  76.       player.move_left = 0.5;
  77.     break;
  78.     case (JPF_JOY_DOWN + JPF_JOY_RIGHT):
  79.       player.move_down =
  80.       player.move_right = 0.5;
  81.     break;
  82.     case (JPF_BUTTON_FORWARD):
  83.       player.move_pitchright = 1.0;
  84.     break;
  85.     case (JPF_BUTTON_REVERSE):
  86.       player.move_pitchleft = 1.0;
  87.     break;
  88.     case (JPF_JOY_UP + JPF_BUTTON_RED):
  89.       player.move_up = 0.5;
  90.       PlayerFires();
  91.     break;
  92.     case (JPF_JOY_DOWN + JPF_BUTTON_RED):
  93.       player.move_down = 0.5;
  94.       PlayerFires();
  95.     break;
  96.     case (JPF_JOY_LEFT + JPF_BUTTON_RED):
  97.       player.move_left = 0.5;
  98.       PlayerFires();
  99.     break;
  100.     case (JPF_JOY_RIGHT + JPF_BUTTON_RED):
  101.       player.move_right = 0.5;
  102.       PlayerFires();
  103.     break;
  104.     case (JPF_JOY_UP + JPF_JOY_LEFT + JPF_BUTTON_RED):
  105.       player.move_up =
  106.       player.move_left = 0.5;
  107.       PlayerFires();
  108.     break;
  109.     case (JPF_JOY_UP + JPF_JOY_RIGHT + JPF_BUTTON_RED):
  110.       player.move_up =
  111.       player.move_right = 0.5;
  112.       PlayerFires();
  113.     break;
  114.     case (JPF_JOY_DOWN + JPF_JOY_LEFT + JPF_BUTTON_RED):
  115.       player.move_down =
  116.       player.move_left = 0.5;
  117.       PlayerFires();
  118.     break;
  119.     case (JPF_JOY_DOWN + JPF_JOY_RIGHT + JPF_BUTTON_RED):
  120.       player.move_down =
  121.       player.move_right = 0.5;
  122.       PlayerFires();
  123.     break;
  124.     case (JPF_BUTTON_FORWARD + JPF_BUTTON_RED):
  125.       player.move_pitchright = 1.0;
  126.       PlayerFires();
  127.     break;
  128.     case (JPF_BUTTON_REVERSE + JPF_BUTTON_RED):
  129.       player.move_pitchleft = 1.0;
  130.       PlayerFires();
  131.     break;
  132.   }
  133. }
  134.  
  135. void FreeJoy()
  136. {
  137.   if (LowLevelBase)
  138.   {
  139.     SetJoyPortAttrs(1, SJA_Reinitialize, TAG_DONE);
  140.     CloseLibrary(LowLevelBase);
  141.   }
  142. }
  143.